library(tidyverse)Ejercicio: satisfacción de los pacientes
Práctica guiada (clase 4)
Práctica 1
Para este ejercicio usaremos la tabla de datos de satisfacción de pacientes en un hospital guardada en el archivo .csv llamada SatisfaccionPacientes.csv
Cargamos las librerías necesarias
Lectura de ficheros y normalización de nombres
datos <-
read_csv("./datos/SatisfaccionPacientes.csv") |>
janitor::clean_names()Pregunta 1
Aplica el código que sea necesario para determinar el tamaño muestral, el número de variables y el tipo de estas.
Code
# Tamaño muestral/ número de observaciones
n <- nrow(datos)
#Número de variables
p <- ncol(datos)
# Tipo de variables
datosPregunta 2
Obtén la tabla de frecuencias de las variables cualitativas (lo que puedas) y luego contesta a las siguientes preguntas:
¿Cuántas mujeres hay?
¿Cuántos individuos están casados?
¿Qué porcentaje de individuos tienen un estado de salud Regular o Malo?
¿Harías alguna cosa con la tabla de frecuencia de estado de salud?
Code
# no podemos calcular acumulados ya que son genero es nominal
datos |>
count(genero) |>
rename(frecuencia_abs = n) |>
mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs))
# Hay 53 mujeres
datos |>
count(estado_civil) |>
rename(frecuencia_abs = n) |>
mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs))
# Hay 26 personas casadas
datos <-
datos |>
mutate(estado_salud =
factor(estado_salud, levels = c("Malo", "Regular", "Bueno", "Excelente"),
ordered = TRUE))
datos |>
count(estado_salud) |>
rename(frecuencia_abs = n) |>
mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs),
frecuencia_acum_abs = cumsum(frecuencia_abs),
frecuencia_acum_rel = cumsum(frecuencia_rel))
datos |>
count(estado_salud <= "Regular")
# Hay 44+15 = 59 personas con un estado de salud malo o regular.
# Sería conveniente juntar la categoría excelente con bueno ya que no hay
# suficientes individuos dentro de la primera categoría. Se suele considerar
# por lo general que todas las categorías deben contener al menos un 5% de los
# individuos de toda la muestra.
datos <-
datos |>
mutate(estado_salud = if_else(estado_salud == "Excelente", "Bueno", estado_salud),
estado_salud =
factor(estado_salud, levels = c("Malo", "Regular", "Bueno"),
ordered = TRUE))Pregunta 3
Calcula la media, mediana, cuartiles y desviación típica de las variables cuantitativas (veremos una forma más eficiente de hacerlo pero de momento, una a una). Guarda los resultados en
resumeny expórtalo a unresumen.csv
Code
resumen <-
datos |>
summarise(media_edad = mean(edad), sd_edad = sd(edad),
mediana_edad = median(edad),
Q1_edad = quantile(edad, probs = 0.25),
Q3_edad = quantile(edad, probs = 0.75),
# tiempo espera
media_tiempo_espera = mean(tiempo_espera),
sd_tiempo_espera = sd(tiempo_espera),
mediana_tiempo_espera = median(tiempo_espera),
min_tiempo_espera = min(tiempo_espera),
Q1_tiempo_espera = quantile(tiempo_espera, probs = 0.25),
Q3_tiempo_espera = quantile(tiempo_espera, probs = 0.75),
# grado satisfaccion
media_grado_satisfaccion = mean(grado_satisfaccion),
sd_grado_satisfaccion = sd(grado_satisfaccion),
mediana_grado_satisfaccion = median(grado_satisfaccion),
Q1_grado_satisfaccion = quantile(grado_satisfaccion, probs = 0.25),
Q3_grado_satisfaccion = quantile(grado_satisfaccion, probs = 0.75),
# número visitas
media_numero_visitas = mean(numero_visitas),
sd_numero_visitas = sd(numero_visitas),
mediana_numero_visitas = median(numero_visitas),
Q1_numero_visitas = quantile(numero_visitas, probs = 0.25),
Q3_numero_visitas = quantile(numero_visitas, probs = 0.75))
write_csv(resumen, file = "./datos/resumen.csv")Pregunta 4
Crear un diagrama de barras para la variable género
Code
# Género
ggplot(datos) +
geom_bar(aes(x = genero, fill = genero), alpha = 0.75) +
ggthemes::scale_fill_colorblind() +
labs(title = "Diagrama de barras de la variable género",
x = "Categoría", y = "Frecuencia absoluta",
fill = "Categoría") +
theme_minimal() Pregunta 5
Crear un diagrama de barras para la variable estado de salud
Code
# Estado de salud (el orden importa)
ggplot(datos) +
geom_bar(aes(x = estado_salud, fill = estado_salud)) +
ggthemes::scale_fill_colorblind() +
labs(title = "Diagrama de barras de la variable estado salud",
x = "Categoría",
y = "Frecuencia absoluta",
fill = "Categoría") +
theme_minimal() Pregunta 6
Crear un histograma y un gráfico de densidad para las variable edad, tiempo de espera y grado de satisfacción. ¿Crees que todas deberían representarse mediante este tipo de gráficos? ¿Qué propondrías?
Code
ggplot(datos) +
# Define el ancho de las barras y colores
geom_histogram(aes(x = edad), bins = 30, fill = "darkorange", alpha = 0.75) +
labs(title = "Histograma de edad",
subtitle = "Bins = 30",
x = "Valores", y = "Frecuencia absoluta") +
theme_minimal()
ggplot(datos) +
geom_density(aes(x = edad), color = "darkorange",
fill = "darkorange", alpha = 0.75) +
labs(title = "Gráfico de densidad de edad",
x = "Valores", y = "Frecuencia relativa") +
theme_minimal()
ggplot(datos) +
# Define el ancho de las barras y colores
geom_histogram(aes(x = tiempo_espera), bins = 30, fill = "orchid", alpha = 0.75) +
labs(title = "Histograma de tiempo de espera",
subtitle = "Bins = 30",
x = "Valores", y = "Frecuencia absoluta") +
theme_minimal()
ggplot(datos) +
geom_density(aes(x = tiempo_espera), color = "orchid",
fill = "orchid", alpha = 0.75) +
labs(title = "Gráfico de densidad de tiempo de espera",
x = "Valores", y = "Frecuencia relativa") +
theme_minimal()
# Representación regular, no aporta ni resume
ggplot(datos) +
# Define el ancho de las barras y colores
geom_histogram(aes(x = grado_satisfaccion),
bins = 30, fill = "#308b8e", alpha = 0.75) +
labs(title = "Histograma de grado de satisfacción",
subtitle = "Bins = 30",
x = "Valores", y = "Frecuencia absoluta") +
theme_minimal()
# Las variables discretas se pueden representar con una diagrama de barras
ggplot(datos) +
geom_bar(aes(x = grado_satisfaccion), fill = "#308b8e", alpha = 0.7) +
labs(title = "Diagrama de barras del Grado de satisfacción",
x = "Grado de satisfacción",
y = "Frecuencia absoluta") +
scale_x_continuous(breaks = 5:10) +
theme_minimal()Pregunta 7
Realiza un boxplot para edad y un boxplot para numero de visitas por género y contesta a las siguientes preguntas:
¿La variable edad tiene outliers? ¿Qué edad tienen esos pacientes?
¿Quién ha esperado más los hombres o las mujeres?
Code
# Crear un boxplot de la variable Edad
ggplot(datos) +
geom_boxplot(aes(y = edad), fill = "lightblue", alpha = 0.75,
# Personaliza los outliers
outlier.colour = "red", outlier.shape = 16,
outlier.size = 2) +
labs(title = "Boxplot de edad",
y = "Edad") +
theme_minimal()
# Crear un boxplot de numero de visitas por Género
ggplot(datos) +
geom_boxplot(aes(x = genero, y = tiempo_espera, fill = genero),
alpha = 0.75,
# Personaliza los outliers
outlier.colour = "red",
outlier.shape = 16,
outlier.size = 2) + # Personaliza los outliers
labs(title = "Boxplot de tiempo de espera por género",
x = "Género", y = "Tiempo de Espera") +
theme_minimal() +
scale_fill_brewer(palette = "Set3") # Usar una paleta de colores